AArch64用のArray.make (min_caml_create_array)を用意する
test/cls-bug2.ml に必要なので Array.make (min_caml_create_array) を用意する。
PowerPC版
code:asm
# create_array
.text
.align 2
.globl min_caml_create_array
min_caml_create_array:
mr r6, r2 #
mr r2, r4
create_array_loop:
cmpwi cr7, r6, 0
bne cr7, create_array_cont
b create_array_exit
create_array_exit:
blr
create_array_cont:
stw r5, 0(r4)
subi r6, r6, 1
addi r4, r4, 4
b create_array_loop
AArch64版
ひとまずは以下の Array.make 1 f が通ればいいだけなので、
code:ml
let rec f n =
if n < 0 then () else
(print_int n;
let a = Array.make 1 f in
a.(0) (n - 1)) in
f 9
以下のような雑なコードで済ませた
code:libmincaml.S
# create_array
.text
.align 2
.globl _min_caml_create_array
_min_caml_create_array:
mov x0, x27 # 確保したArrayの先頭アドレスを x0 へ
str x1, x27, 0 # 第二引数の値をArrayの1つ目の要素へ格納 add x27, x27, 8 # ヒープのポインタをインクリメント
ret # x0 に確保したArrayの先頭アドレスを返す